// ----------------------------------
// RSDK Project: Sonic 1/Sonic 2
// Script Description: MPZ Setup Object
// Script Author: Christan Whitehead/Simon Thomley
// Unpacked by Rubberduckycooly's script unpacker
// ----------------------------------

//-------Aliases-------//
private alias 40 : TYPE_MPZSETUP

// Function declarations
reserve function MPZSetup_Function97
reserve function MPZSetup_Function98

// Static Values
public value MPZSetup_value33 = 0;
public value MPZSetup_value34 = 0;
public value MPZSetup_value35 = 0;
public value MPZSetup_value36 = 0;
public value MPZSetup_value37 = 0;
public value MPZSetup_value38 = 0;
public value MPZSetup_value39 = 0;

// Tables
public table MPZSetup_table38
	0xA000, 0, 0xE0E000, 0, 0xE02000, 0, 0xE020E0, 0, 0x80E0, 0
end table

public table MPZSetup_table39
	0x600000, 0x800000, 0xA00000, 0xC00000, 0xA00000, 0x800000
end table

function MPZSetup_Function97
	CheckEqual(object[25].type, TypeName[Music Event])
	temp0 = checkResult
	CheckEqual(object[25].propertyValue, 2)
	temp0 &= checkResult
	CheckEqual(stage.musicFlag, 0)
	temp0 &= checkResult
	if temp0 == 0
		switch music.currentTrack
		case 0
			SetMusicTrack("Invincibility_F.ogg", 2, 0x78B1)
			SwapMusicTrack("Metropolis_F.ogg", 0, 0x3C662, 0x1F40)
			break
		case 2
			SetMusicTrack("Metropolis_F.ogg", 0, 0x3C662)
			SwapMusicTrack("Invincibility_F.ogg", 2, 0x78B1, 0x1F40)
			break
		case 4
		case 6
		case 7
			SetMusicTrack("Metropolis_F.ogg", 0, 0x3C662)
			SetMusicTrack("Invincibility_F.ogg", 2, 0x78B1)
			break
		end switch
	else
		stage.musicFlag = 1
	end if
end function


function MPZSetup_Function98
	CheckEqual(object[25].type, TypeName[Music Event])
	temp0 = checkResult
	CheckEqual(object[25].propertyValue, 2)
	temp0 &= checkResult
	CheckEqual(stage.musicFlag, 0)
	temp0 &= checkResult
	if temp0 == 0
		switch music.currentTrack
		case 0
			SetMusicTrack("Invincibility.ogg", 2, 0x9717)
			SwapMusicTrack("Metropolis.ogg", 0, 0x4B882, 0x30D4)
			break
		case 2
			SetMusicTrack("Metropolis.ogg", 0, 0x4B882)
			SwapMusicTrack("Invincibility.ogg", 2, 0x9717, 0x30D4)
			break
		case 4
		case 6
		case 7
			SetMusicTrack("Metropolis.ogg", 0, 0x4B882)
			SetMusicTrack("Invincibility.ogg", 2, 0x9717)
			break
		end switch
	else
		stage.musicFlag = 2
	end if
end function


event ObjectMain
	object.value0++
	if object.value0 > 2
		object.value0 = 0
		RotatePalette(0, 161, 163, 0)
	end if
	object.value10++
	if object.value10 >= 10
		object.value10 = 0
		object.value11++
		if object.value11 >= 10
			object.value11 = 0
		end if
		GetTableValue(temp0, object.value11, MPZSetup_table38)
		SetPaletteEntry(0, 175, temp0)
	end if
	object.value12++
	if object.value12 >= 18
		object.value12 = 0
		object.value13++
		if object.value13 >= 6
			object.value13 = 0
		end if
		GetTableValue(temp0, object.value13, MPZSetup_table39)
		SetPaletteEntry(0, 168, temp0)
	end if
	Copy16x16Tile(760, object.value2)
	object.value2++
	Copy16x16Tile(761, object.value2)
	object.value2++
	Copy16x16Tile(762, object.value2)
	object.value2++
	Copy16x16Tile(763, object.value2)
	object.value2++
	Copy16x16Tile(764, object.value2)
	object.value2++
	Copy16x16Tile(765, object.value2)
	object.value2++
	Copy16x16Tile(766, object.value2)
	object.value2++
	Copy16x16Tile(767, object.value2)
	object.value2++
	if object.value2 == 832
		object.value2 = 768
	end if
	Copy16x16Tile(744, object.value3)
	object.value3++
	Copy16x16Tile(745, object.value3)
	object.value3++
	Copy16x16Tile(746, object.value3)
	object.value3++
	Copy16x16Tile(747, object.value3)
	object.value3++
	Copy16x16Tile(748, object.value3)
	object.value3++
	Copy16x16Tile(749, object.value3)
	object.value3++
	Copy16x16Tile(750, object.value3)
	object.value3++
	Copy16x16Tile(751, object.value3)
	object.value3++
	if object.value3 == 896
		object.value3 = 832
	end if
	if object.value7 < 2
		Copy16x16Tile(753, object.value4)
		object.value4++
		Copy16x16Tile(754, object.value4)
		object.value4++
		Copy16x16Tile(755, object.value4)
		object.value4++
		if object.value4 == 908
			object.value4 = 896
		end if
		Copy16x16Tile(742, object.value5)
		object.value5++
		Copy16x16Tile(743, object.value5)
		object.value5++
		Copy16x16Tile(752, object.value5)
		object.value5++
		if object.value5 == 908
			object.value5 = 896
		end if
		if object.value8 == 0
			object.value7 = 20
		else
			object.value7 = 8
		end if
		object.value8 ^= 1
	else
		object.value7--
	end if
	if object.value9 < 2
		Copy16x16Tile(756, object.value6)
		object.value6++
		Copy16x16Tile(757, object.value6)
		object.value6++
		Copy16x16Tile(758, object.value6)
		object.value6++
		Copy16x16Tile(759, object.value6)
		object.value6++
		if object.value6 == 932
			object.value6 = 908
		end if
		object.value9 = 14
	else
		object.value9--
	end if
	foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
		temp1 = object[currentPlayer].xpos
		temp1 >>= 16
		temp2 = object[currentPlayer].ypos
		temp2 >>= 16
		temp2 += 4
		Get16x16TileInfo(temp0, temp1, temp2, TILEINFO_ANGLEB)
		temp0 &= 1
		if temp0 == 1
			CallFunction(PlayerObject_FireHit)
		end if
	next
	MPZSetup_value34 += MPZSetup_value35
	MPZSetup_value34 &= 3
	if object[0].ypos >= 0x8F0 0000
		temp1 = object[0].ypos
		currentPlayer = 0
		while currentPlayer < playerCount
			temp0 = object[currentPlayer].ypos
			temp0 -= temp1
			Abs(temp0)
			if temp0 < 0x8C0000
				object[currentPlayer].ypos -= 0x800 0000
			end if
			currentPlayer++
		loop
		if screen.cameraY >= 0x800
			screen.cameraY -= 0x800
			screen.yoffset -= 0x800
		end if
	end if
	if object[0].ypos <= 0x90 0000
		temp1 = object[0].ypos
		currentPlayer = 0
		while currentPlayer < playerCount
			temp0 = object[currentPlayer].ypos
			temp0 -= temp1
			Abs(temp0)
			if temp0 < 0x8C0000
				object[currentPlayer].ypos += 0x8000000
			end if
			currentPlayer++
		loop
		if screen.cameraY <= 384
			screen.cameraY += 0x800
			screen.yoffset += 0x800
		end if
	end if

	if screen.cameraY >= 0x480
		if MPZSetup_value33 == 0
			MPZSetup_value33 = 1
			arrayPos0 = 32
			while arrayPos0 < 0x4A0
				if object[arrayPos0].ypos <= 0x2800000
					object[arrayPos0].ypos += 0x8000000
					object[arrayPos0].value31 += 0x8000000
				end if
				arrayPos0++
			loop
		end if
	end if
	if screen.cameraY <= 0x47F
		if MPZSetup_value33 == 1
			MPZSetup_value33 = 0
			arrayPos0 = 32
			while arrayPos0 < 0x4A0
				if object[arrayPos0].ypos >= 0x680 0000
					object[arrayPos0].ypos -= 0x8000000
					object[arrayPos0].value31 -= 0x8000000
				end if
				arrayPos0++
			loop
		end if
	end if
	
	if object[0].state == PlayerObject_Knockback
		MPZSetup_value37 = 1
	end if
	if MPZSetup_value36 == 0
		if stage.debugMode == 0
			if object[30].type == TypeName[Act Finish]
				MPZSetup_value36 = 1
				if MPZSetup_value37 == 0
					//CallNativeFunction2(SetAchievement, 9, 100)
					achievement.trigger = 9 //Metropolis Master
				end if
			end if
		end if
	end if
end event


event ObjectStartup
	SetMusicTrack("Metropolis.ogg", 0, 0x4B882)
	SpeedUpMusic = MPZSetup_Function97
	SlowDownMusic = MPZSetup_Function98
	animalType1 = TypeName[Locky]
	animalType2 = TypeName[Wocky]
	SetPaletteEntry(0, 192, 0)
	object[10].type = TypeName[MPZ Setup]
	object[10].priority = PRIORITY_ACTIVE
	object[10].value2 = 768
	object[10].value3 = 832
	object[10].value4 = 896
	object[10].value5 = 902
	object[10].value6 = 908
	MPZSetup_value33 = 0
	MPZSetup_value34 = 0
	MPZSetup_value35 = 0
	MPZSetup_value36 = 0
	if starPostID == 0
		MPZSetup_value37 = 0
	end if
	switch stage.actNum
		case 0
		case 1
			ResetObjectEntity(477, TypeName[Invisible Block], object[475].propertyValue, object[475].xpos, object[475].ypos)
			object[477].drawOrder = 5
			object[477].value0 = 16			
			object[477].drawOrder = 5
			object[477].value0 = object[477].propertyValue
			object[477].value0 &= 240
			object[477].value0 += 16
			object[477].value0 >>= 1
			object[477].value1 = object[tempObjectPos].propertyValue
			object[477].value1 &= 15
			object[477].value1++
			object[477].value1 <<= 3
			
			object[475].type = TypeName[Blank Object]	
			object[477].ypos -= 0x5 0000		
			object[473].ypos -= 0x5 0000
			//LoadPalette("MPZAct1Pal.act", 0, 128, 128, 256)
			break
		case 2
			ResetObjectEntity(132, TypeName[Blank Object], 0, 0, 0)
			ResetObjectEntity(133, TypeName[Blank Object], 0, 0, 0)
			ResetObjectEntity(134, TypeName[Blank Object], 0, 0, 0)
			ResetObjectEntity(135, TypeName[Blank Object], 0, 0, 0)
			ResetObjectEntity(136, TypeName[Blank Object], 0, 0, 0)
			ResetObjectEntity(137, TypeName[Blank Object], 0, 0, 0)
			ResetObjectEntity(138, TypeName[Blank Object], 0, 0, 0)
			ResetObjectEntity(139, TypeName[Blank Object], 0, 0, 0)
			ResetObjectEntity(140, TypeName[Blank Object], 0, 0, 0)
			ResetObjectEntity(189, TypeName[Blank Object], 0, 0, 0)
			ResetObjectEntity(192, TypeName[Blank Object], 0, 0, 0)
			LoadPalette("MPZAct2Pal.act", 0, 128, 128, 256)
			break
		case 3
			LoadPalette("MPZAct3Pal.act", 0, 128, 128, 256)
			break
	end switch
end event

event RSDKDraw
	DrawSprite(0)
end event

event RSDKLoad
	LoadSpriteSheet("Global/Display.gif")
	SpriteFrame(-16, -16, 32, 32, 1, 143)
end event
